package demo01;

import java.util.LinkedHashMap;
import java.util.Map;

public class HanserLinkedHashMapAccessOrderExample {
    public static void main(String[] args) {
        // 创建一个 LinkedHashMap，指定初始容量、加载因子，并将访问顺序设置为 true
        // 当 accessOrder 为 true 时，get() 方法访问过的元素会被移动到链表的末尾
        Map<String, String> linkedHashMap = new LinkedHashMap<>(16, .75f, true);

        // 添加与 Hanser 相关的数据
        linkedHashMap.put("Hanser", "知名虚拟偶像");
        linkedHashMap.put("Hanserwei", "汉瑟薇");
        linkedHashMap.put("Fan", "粉丝");
        linkedHashMap.put("Music", "音乐作品");

        // 打印初始状态的 LinkedHashMap
        System.out.println("初始 LinkedHashMap: " + linkedHashMap);
        // 预期输出顺序（按插入顺序）：Hanser, Hanserwei, Fan, Music

        // 访问 "Hanserwei"，这会将其移动到迭代顺序的末尾
        System.out.println("\n访问 'Hanserwei' 之后:");
        linkedHashMap.get("Hanserwei"); // 调用 get 方法会触发访问顺序的重新排序
        System.out.println(linkedHashMap);
        // 预期输出顺序：Hanser, Fan, Music, Hanserwei (Hanserwei 被移到最后)

        // 再次访问 "Hanser"，这会将其移动到迭代顺序的末尾
        System.out.println("\n访问 'Hanser' 之后:");
        linkedHashMap.get("Hanser"); // 再次调用 get 方法，Hanser 也会被移到最后
        System.out.println(linkedHashMap);
        // 预期输出顺序：Fan, Music, Hanserwei, Hanser (Hanser 被移到最后)
    }
}